//
// Created by Lenovo on 2024/3/1.
//
#include<bits/stdc++.h>
using namespace std;
//太平洋大西洋水流问题
class Solution {
public:

    int m,n;
    bool flag1=false,flag2=false;       //flag1--能否流入太平洋，flag2--能否流入大西洋
    int go[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
    vector<vector<int>> resList;
    bool st[201][201];


    void dfs(vector<vector<int>>& heights,int x,int y){
        if(x==0 || y==0) flag1=true;
        if(x==m-1 || y==n-1) flag2=true;
        for(int i=0;i<4;i++){
            int nextX=x+go[i][0];
            int nextY=y+go[i][1];
            if(nextX>=0 && nextX<m && nextY>=0 && nextY<n && heights[x][y]>=heights[nextX][nextY] && !st[nextX][nextY]){
                st[nextX][nextY]=true;
                dfs(heights,nextX,nextY);
            }
        }
    }

    void initST(){
        for(int i=0;i<201;i++){
            for(int j=0;j<201;j++){
                st[i][j]= false;
            }
        }
    }

    vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {
        m=heights.size();
        n=heights[0].size();
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                flag1= false;
                flag2= false;
                initST();
                st[i][j]=true;
                dfs(heights,i,j);
                if(flag1 && flag2){
                    resList.push_back({i,j});
                }
            }
        }
        return  resList;
    }
};